// 导入vue 和vuex
import Vue from 'vue'
import Vuex from 'vuex'
// 导入用户信息数据请求接口
import {
    userInfoAPI
} from '@/api'
// 导入存储函数
import {
    setToken,
    getToken,
    delToken
} from '@/utils/auth'
// 安装vuex
Vue.use(Vuex)
// 实例一个vuex对象
// 由于vuex一刷新token就会消失，所以需要在本地存储里取
const store = new Vuex.Store({
    state: {
        tokenObj: getToken() || {},
        userInfo: {},
        commentInfo: []
    },
    mutations: {
        saveToken(state, obj) {
            state.tokenObj = obj;
            // 保存到本地
            setToken(obj)
        },
        saveUserInfo(state, obj) {
            state.userInfo = obj
        },
        loginout(state) {
            // 清空vuex里的tokenobj
            state.tokenObj = {}
            // 删除locastore里的tokenobj
            delToken()
            // 删掉保存的用户信息，不然别人换账号登录还是上一个账号的信息
            state.userInfo = {}

        },
        // saveCommentInfo(obj) {
        //     commentInfo = obj
        // }
    },
    actions: {
        // 该对象是用来放异步代码的，但是无法直接对state里的数据进行修改，只能通过commit提交mutations里面的代码进行改动
        // 把用户信息请求的接口请求函数封装起来
        // 该参数代表的是vuex实例
        async getUserInfo(context) {
            //   为了避免请求浪费，先判断vuex里是否有数据，没有就发请求
            if (!context.state.userInfo.name) {
                // 获取到用户的数据
                let res = await userInfoAPI();
                // 把用户的数据保存到vuex里
                context.commit("saveUserInfo", res.data.data);
            }
        },
        // async getcommentInfo() {
        //     // 获取评论信息
        //     let res1 = await getCommentAPI({
        //         type: "a",
        //         source: this.$route.query.id,
        //     });
        //     // 把数据存在vuex里
        //     context.commit(" saveCommentInfo", res1.data.data.results);
        // },

    }
})
// 暴露store
export default store